﻿#include<iostream>
using namespace std;
//class Date
//{
//public:
//	Date()
//	{
//		_year = 1;
//		_month = 1;
//		_day = 1;
//	}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//class Date
//{
//public:
//	/*Date(int year = 1,int month = 1,int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}*/
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
typedef int STDataType;
class Stack
{
public:
	Stack(int n = 4)
	{
		_a = (STDataType*)malloc(sizeof(STDataType) * n);
		if (nullptr == _a)
		{
			perror("malloc申请空间失败");
			return;
		}
		_capacity = n;
		_top = 0;
	}
	//赋值运算符重载
	Stack& operator=(const Stack& st)
	{
		//先释放原空间
		free(_a);
		//再让创建一个新空间
		_a = (STDataType*)malloc(sizeof(STDataType) * st._capacity);
		//把另外一个栈中的数据拷贝过来
		//我们拷贝的只有top个数据
		memcpy(_a, st._a, sizeof(STDataType) * st._top);
		//再把_top和_capacity拷贝过去，完成深拷贝
		_top = st._top;
		_capacity = st._capacity;
		return *this;
	}
private:
	STDataType* _a;
	size_t _capacity;
	size_t _top;
};
class Date
{
public:
	//构造函数
	Date(int year = 1,int month = 1,int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//拷贝构造函数
	Date(Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
		cout << "Date(Date&d)" << endl;
	}
	//Date& operator+=(int t)
	//{
	//	_day += t;
	//	return *this;
	//}
	//const成员函数
	void Print() const
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
	//普通
	Date* operator&()
	{
		return this;
	}
	//const
	const Date* operator&() const
	{
		//返回值不可以省略const，因为会涉及到权限放大问题
		return this;
		//最后的const也不能省略（见const修饰成员函数的含义）
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	const Date d1(2025, 4, 20);
	d1.Print();
	//d1 += 10;
	return 0;
}
//void func1(Date d)
//{
//
//}
//Date func2()
//{
//	Date d;
//	return d;
//}
//int main()
//{
//	//调用构造函数
//	Date d1(2025, 4, 19);
//	//调用拷贝构造函数
//	//Date d2(d1);
//	//d2.Print();
//	//func1(d1);
//	func2();
//	return 0;
//}
// 两个Stack实现队列
class MyQueue
{
public:
	//编译器默认⽣成MyQueue的构造函数调⽤了Stack的构造，完成了两个成员的初始化
private:
	Stack pushst;
	Stack popst;
};
//int main()
//{
//	Date d1(2025,4,15);
//	d1.Print();
//	Date d2(2025,4,15);
//	//d2.Date(2025, 4, 15);
//	d2.Print();
//	return 0;
//}